matplotlibの設定とcontext manager とmosaic plot

  • matplotlibの設定一覧
  • 上記の設定を一時的に適用できるcontext manager
  • mosaic plot というクロス集計結果の割合の可視化
  • plot結果を解像度指定して画像として保存
%matplotlib inline

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns


iris = sns.load_dataset("iris")
iris_copy = iris.copy()
iris_copy["sepal_length_round"] = iris_copy.sepal_length.round()

# http://matplotlib.org/users/customizing.html
plot_context = {
    'figure.figsize': (10, 8),
    'font.size': 18,
    'font.stretch': 18,
    'figure.dpi': 100,
    'axes.labelsize': 18,
    'axes.titlesize': 20,
    'xtick.labelsize': 15,
    'ytick.labelsize': 20,
    'legend.fontsize': 15,
    'lines.markersize': 15,
}
# それっぽいものがあるかは下記で調べた
{k for k in plt.rcParams.keys() if "text" in k} | {k for k in plt.rcParams.keys() if "size" in k}

# http://statsmodels.sourceforge.net/stable/generated/statsmodels.graphics.mosaicplot.mosaic.html
from statsmodels.graphics.mosaicplot import mosaic
with plt.rc_context(plot_context):
    fig, rects = mosaic(iris_copy, ["sepal_length_round", "species"], gap=0.01)
    plt.savefig("mosaic_cm.png", dpi=200)

# 結果のDataFrame Indexが示す値は何か書いてない…
# 0, 1, : ??
# 2: 横軸を全体とした時の構成比率
# 3: 各横軸内での構成比率
pd.DataFrame(rects)

# 各IndexでのPlot
fig, axes = plt.subplots(1, 2, figsize=(10, 5))
index = ["sepal_length_round", "species"]
mosaic(iris_copy, index, gap=0.01, ax=axes[0])
mosaic(iris_copy, index[::-1], gap=0.01, ax=axes[1])
plt.tight_layout()
5.0 4.0 6.0 7.0 8.0
setosa versicolor virginica setosa versicolor virginica setosa versicolor virginica setosa versicolor virginica setosa versicolor virginica
0 0.000000 0.000000 0.000000 0.310897 0.310897 0.310897 0.352564 0.352564 0.352564 0.798077 0.798077 0.798077 0.961538 0.961538 0.961538
1 0.000000 0.846445 0.979003 0.000000 0.993421 1.000000 0.000000 0.079141 0.608166 0.000000 0.006579 0.342105 0.000000 0.006579 0.013158
2 0.301282 0.301282 0.301282 0.032051 0.032051 0.032051 0.435897 0.435897 0.435897 0.153846 0.153846 0.153846 0.038462 0.038462 0.038462
3 0.839866 0.125980 0.020997 0.986842 0.000000 0.000000 0.072562 0.522446 0.391834 0.000000 0.328947 0.657895 0.000000 0.000000 0.986842